//
//  MsgSendViewController.m
//
//  Created by 周成龙
//

#import "MsgSendViewController.h"

#import <stdio.h>

@interface MsgSendViewController ()

@end

@implementation MsgSendViewController
#pragma mark - LifeCycle
- (void)viewDidLoad {
    [super viewDidLoad];
    
    /**
     消息由接受者，选择子，参数构成。
     
     // 给对象发送消息
     id returnValue = [someObject messageName:parameter];
     
     // 原型
     void objc_msgSend(id self, SEL cmd, ...);
     
     // 编译器处理后：
     id returnValue = objc_msgSend(someObject, @seletor(messageName:), parameter);
     */
    
    /**
     objc_msgSend_stret: 待发送的消息要返回结构体
     objc_msgSend_fpret: 消息返回的是浮点数
     objc_msgSendSuper:  要给超类发送消息
     */
    
    doTheThing1(1);
    doTheThing2(0);
}


/** 举例 **/

void printHello() {
    printf("hello\n");
}

void printGoodbye() {
    printf("goodbye\n");
}

// 静态绑定
void doTheThing1(int type) {
    if (type == 0) {
        printHello();
    }else {
        printGoodbye();
    }
}

// 动态绑定
void doTheThing2(int type) {
    void (*fnc) ();
    if (type == 0) {
        fnc = printHello;
    }else {
        fnc = printGoodbye;
    }
    fnc();
}

@end

